home *** CD-ROM | disk | FTP | other *** search
-
- { SEE BELOW FOR ENTIRE PROJECT USING THIS INTERFACE }
- (* DLL can be found at: http://quest.jpl.nasa.gov/Info-ZIP/ *)
-
- UNIT WizUnZip;
-
- (* *)
- (* AUTHOR: Michael G. Slack DATE WRITTEN: 05/17/1996 *)
- (* ENVIRONMENT: Borland Pascal V7.0+/Delphi V1.02+ *)
- (* *)
- (* Unit that defines the interface into the wizunzip dll. *)
- (* NOTE: File names are case-sensitive. *)
- (* *)
- (* To use: *)
- (* VAR _DCL : PDCL; *)
- (* Fils : PACHAR; {pointer to array or pchars} *)
- (* ZipFn : ARRAY[0..144] OF CHAR; *)
- (* FilNm : ARRAY[0..xx] OF CHAR; *)
- (* { TT : THANDLE; } *)
- (* ... *)
- (* StrCopy(FilNm,'case sensitive file name (could incl wildcards)'); *)
- (* GetMem(Fils,SizeOf(PCHAR)); {only allocating for single file} *)
- (* {or} *)
- (* {should use this method in Delphi - seems to prevent GPFs} *)
- (* { TT := GlobalAlloc(GHnd,SizeOf(PCHAR)); } *)
- (* { Fils := GlobalLock(TT); } *)
- (* Fils^[0] := @FilNm; *)
- (* StrCopy(ZipFn,'C:\UNZIP52.ZIP'); *)
- (* WZInitADCL(_DCL,HInstance,MWnd,LWnd); {create/initialize struct} *)
- (* WITH _DCL^ DO *)
- (* BEGIN {setup rest of parameters for unzip} *)
- (* WITH lpUMB^ DO *)
- (* StrCopy(szUnzipToDirName,'some dir'); {only dir that is used} *)
- (* {set flags wanted (all set to false from init)} *)
- (* OverWrite := TRUE; {example} *)
- (* ArgC := 1; {set equal to number of files submitting} *)
- (* lpszZipFN := @ZipFn; *)
- (* FNV := Fils; *)
- (* END; {with} *)
- (* I := WZ_UnZip(_DCL); {run unzip proc} *)
- (* WZDestroyDCL(_DCL); {release control block} *)
- (* FreeMem(Fils,SizeOf(PCHAR)); {free file list} *)
- (* {or} *)
- (* { GlobalUnlock(TT); } *)
- (* { GlobalFree(TT); } *)
- (* IF I <> wze_OK THEN {problem with unzip}; *)
- (* *)
- (* -------------------------------------------------------------------- *)
- (* *)
- (* REVISED: 07/30/1996 - Per suggestions from Brad Clarke *)
- (* (bclarke@cyberus.ca), added listing constants *)
- (* and changed nzFlag to integer. *)
- (* *)
-
- INTERFACE
-
- USES WinTypes, WinProcs, CommDlg;
-
- CONST LibName = 'wizunz16';
- wzl_WizUnzip_Max_Path = 127; {128}
- wzl_Options_Buffer_Len = 255; {256}
- wzl_None = 0; {no listing}
- wzl_Short = 1; {short listing}
- wzl_Long = 2; {long listing}
- wze_OK = 0;
- wze_Warning = 1;
- wze_Err = 2;
- wze_BadErr = 3;
- wze_Mem = 4;
- wze_Mem2 = 5;
- wze_Mem3 = 6;
- wze_Mem4 = 7;
- wze_Mem5 = 8;
- wze_NoZip = 9;
- wze_Param = 10;
- wze_Find = 11;
- wze_Disk = 50;
- wze_EOF = 51;
-
- TYPE PUMB = ^TUMB;
- TUMB = RECORD
- {fully qualified archive name (OEM chars)}
- szFileName : ARRAY[0..wzl_WizUnzip_Max_Path] OF CHAR;
- {directory with archive (ANSI chars)}
- szDirName : ARRAY[0..wzl_WizUnzip_Max_Path] OF CHAR;
- {extraction directory "unzip to" (ANSI chars)}
- szUnzipToDirName : ARRAY[0..wzl_WizUnzip_Max_Path] OF CHAR;
- {temp extraction dir "unzip to" (ANSI chars)}
- szUnzipToDirNameTmp : ARRAY[0..wzl_WizUnzip_Max_Path] OF CHAR;
- {extraction directory "unzip from" (ANSI chars)}
- szUnzipFromDirName : ARRAY[0..wzl_WizUnzip_Max_Path] OF CHAR;
- {text for totals of zip archive}
- szTotalsLine : ARRAY[0..79] OF CHAR;
- {scratch buffer}
- szBuffer : ARRAY[0..wzl_Options_Buffer_Len] OF CHAR;
- {wave file name for sound}
- szSoundName : ARRAY[0..wzl_WizUnzip_Max_Path] OF CHAR;
- {password for encrypted files}
- szPassword : ARRAY[0..80] OF CHAR;
- {pointer to szpassword}
- lpPassword : PCHAR;
- {archive open file name struct (commdlg)}
- ofn : TOPENFILENAME;
- {wave file open file name struct (commdlg)}
- wofn : TOPENFILENAME;
- {???}
- msg : TMSG;
- {archive open file struct}
- _of : TOFSTRUCT;
- {wave file open file struct}
- wof : TOFSTRUCT;
- END;
- TDLLPRNT = FUNCTION{(VAR F : FILE; Len : WORD; S : PCHAR)} : WORD; {CEDCL;}
- TDLLSND = PROCEDURE; {CEDCL;}
- PACHAR = ^TACHAR;
- TACHAR = ARRAY[0..8187] OF PCHAR;
- PDCL = ^TDCL;
- TDCL = RECORD
- PrintFunc : TDLLPRNT; {ptr to appl print routine}
- SoundProc : TDLLSND; {prt to appl sound routine}
- StdOut : POINTER; {stdout/ptr to C FILE struct}
- lpUMB : PUMB;
- hWndList : HWND; {list box to disp zip contents in}
- hWndMain : HWND; {appl main window}
- hInst : THANDLE; {appl instance}
- ExtractOnlyNewer : BOOL; {true = extract only newer}
- OverWrite : BOOL; {true = always overwrite}
- SpaceToUnderscore : BOOL; {true = convert space to underscore}
- PromptToOverwrite : BOOL; {true = prompt on overwrite}
- ncFlag : BOOL; {true = write to stdout}
- ntFlag : BOOL; {true = test zip file}
- nvFlag : INTEGER; {0=no list, 1=short list, 2=long list}
- nuFlag : BOOL; {true = update extraction}
- nzFlag : BOOL; {true = display zip file comment}
- ndFlag : BOOL; {true = extract w/stored directories}
- noFlag : BOOL; {true = extract all files}
- naFlag : BOOL; {true = ascii-ebcdic/eoln translate}
- ArgC : INTEGER; {count of files to extract}
- lpszZipFN : PCHAR; {zip file name}
- FNV : PACHAR; {list of files to extract}
- END;
-
- (************************************************************************)
-
- PROCEDURE WZInitADCL(VAR _DCL : PDCL; PInst : THANDLE; MainW, ListW : HWND);
- (* procedure used to alloc and init a dcl struct with zeros *)
-
- PROCEDURE WZDestroyDCL(VAR _DCL : PDCL);
- (* procedure used to free a dcl allocated by prior call to initadcl *)
-
- FUNCTION WZDummyPrint{(VAR FH : INTEGER; Len : WORD; S : PCHAR)} : WORD; {CEDCL;}
- (* procedure that can be used as a dummy print routine for dll *)
- (* - C call back, parameters ignored in dummy *)
-
- PROCEDURE WZDummySound; {CEDCL;}
- (* procedure that can be used as a dummy sound routine for the dll *)
-
- FUNCTION WZRetErrorString(ErrC : INTEGER) : STRING;
- (* function used to return error as a string *)
-
- FUNCTION WZ_UnZip(_DCL : PDCL) : INTEGER;
- (* wrapper function to handle switching to choosen unzip to directory *)
-
- (* dll functions ----------------------------------------------------- *)
- FUNCTION DLLProcessZipFiles(_DCL : PDCL) : INTEGER;
- (* function to run the unzip routine *)
-
- PROCEDURE GetDLLVersion(VAR Ver : LONGINT);
- (* procedure to return the current dll version of wizunzip *)
- (* hiword(ver) = major . loword(ver) = minor *)
-
- (************************************************************************)
-
- IMPLEMENTATION
-
- {$IFDEF VER80}
- USES SysUtils;
- {$ELSE}
- USES Strings;
- {$ENDIF}
-
- (************************************************************************)
-
- PROCEDURE WZInitADCL(VAR _DCL : PDCL; PInst : THANDLE; MainW, ListW : HWND);
-
- BEGIN (*wzinitadcl*)
- GetMem(_DCL,SizeOf(TDCL));
- FillChar(_DCL^,SizeOf(TDCL),0);
- _DCL^.PrintFunc := WZDummyPrint;
- _DCL^.SoundProc := WZDummySound;
- GetMem(_DCL^.lpUMB,SizeOf(TUMB));
- FillChar(_DCL^.lpUMB^,SizeOf(TUMB),0);
- _DCL^.lpUMB^.lpPassword := @_DCL^.lpUMB^.szPassword;
- _DCL^.hWndMain := MainW;
- _DCL^.hWndList := ListW;
- _DCL^.hInst := PInst;
- END; (*wzinitadcl*)
-
- (************************************************************************)
-
- PROCEDURE WZDestroyDCL(VAR _DCL : PDCL);
-
- BEGIN (*wzdestroydcl*)
- IF _DCL = NIL THEN Exit;
- FreeMem(_DCL^.lpUMB,SizeOf(TUMB));
- FreeMem(_DCL,SizeOf(TDCL));
- _DCL := NIL;
- END; (*wzdestroydcl*)
-
- (************************************************************************)
-
- FUNCTION WZDummyPrint{(VAR F : FILE; Len : WORD; S : PCHAR)} : WORD;
- VAR Len : WORD;
- BEGIN (*wzdummyprint*)
- ASM
- MOV AX,[BP+8] {pass back len as return}
- END;
- END; (*wzdummyprint*)
-
- (************************************************************************)
-
- PROCEDURE WZDummySound;
- VAR I : INTEGER;
- BEGIN (*wzdummysound*)
- {do nothing}
- I := 1; {so that optimizations do not remove proc}
- END; (*wzdummysound*)
-
- (************************************************************************)
-
- FUNCTION WZRetErrorString(ErrC : INTEGER) : STRING;
-
- VAR T : STRING[80];
- N : STRING[5];
-
- BEGIN (*wzreterrorstring*)
- T := '';
- CASE ErrC OF
- wze_OK : ;
- wze_Warning : T := 'Warning, zip may have error!';
- wze_Err : T := 'Error in zipfile!';
- wze_BadErr : T := 'Critical error in zipfile!';
- wze_Mem : T := 'Insufficient memory!';
- wze_Mem2 : T := 'Insufficient memory (2)!';
- wze_Mem3 : T := 'Insufficient memory (3)!';
- wze_Mem4 : T := 'Insufficient memory (4)!';
- wze_Mem5 : T := 'Insufficient memory (5)!';
- wze_NoZip : T := 'Not a zip file/zip file not found!';
- wze_Param : T := 'Invalid parameters specified!';
- wze_Find : T := 'No files found!';
- wze_Disk : T := 'Disk full error!';
- wze_EOF : T := 'Unexpected EOF encountered!';
- ELSE BEGIN {other error}
- Str(ErrC,N);
- T := 'Other error during zip operation - Error code = '+N;
- END; {else}
- END; {case}
- WZRetErrorString := T;
- END; (*wzreterrorstring*)
-
- (************************************************************************)
-
- FUNCTION WZ_UnZip(_DCL : PDCL) : INTEGER;
- VAR S1, S2 : STRING[144];
- W : WORD;
- BEGIN (*wz_unzip*)
- W := SetErrorMode($8001); S1 := '';
- GetDir(0,S1); S2 := StrPas(_DCL^.lpUMB^.szUnzipToDirName);
- IF S2[Length(S2)] = '\'
- THEN BEGIN {remove '\'?}
- IF (Length(S2) > 1) AND (S2[Length(S2)-1] <> ':')
- THEN Delete(S2,Length(S2),1); {not 'c:\'}
- IF Length(S2) = 1 THEN S2 := '';
- END; {then}
- IF S2 <> ''
- THEN {$I-} ChDir(S2) {$I+}
- ELSE S1 := '';
- IF IOResult <> 0
- THEN BEGIN {error in ch dir}
- MessageBeep(mb_OK);
- MessageBox(_DCL^.hWndMain,'Could not set "unzip-to" directory!',NIL,
- mb_OK OR mb_IconStop);
- S1 := '';
- END; {then}
- SetErrorMode(W);
- WZ_UnZip := DLLProcessZipFiles(_DCL);
- IF S1 <> '' THEN ChDir(S1);
- END; (*wz_unzip*)
-
- (************************************************************************)
-
- FUNCTION DLLProcessZipFiles(_DCL : PDCL) : INTEGER;
- EXTERNAL LibName INDEX 1;
-
- PROCEDURE GetDLLVersion(VAR Ver : LONGINT);
- EXTERNAL LibName INDEX 3;
-
- (************************************************************************)
-
- END. (*of unit*)
-
- { Cut this out to a file : Name it TESTDLL.XX and use XX3402 to decode }
- { TESTDLL.ZIP will be created }
-
-
- *XX3402-003539-250896--72--85-21555-----TESTDLL.ZIP--1-OF--1
- I2g1--E++++6+1lSlW-H15rKQU2++7w1+++A++++JItOLpF3IpEiF3B9bJ9jHw6k2DqyNDw8
- OOT6Nf6DC30K+0tiC6IFIpa3maWLIY9wvyoDlWOFFDlohrhjvxvpPXN0V8O2takzhuq+MmGk
- 1qrfaKn7Su5HK8UOg8oVzV+e7elI6GKtKDYiYCY+YyJ8y3vPhalf3b3KMWuyEfchwI6kTd4m
- puaYcSgSdOx+Fqhr0v8Y4ol3V+cg-8uZERLvIzMQ6MeKiB5Mc0YGWxLdh+OuYlzfYV2eTgQ1
- J-HGvq7x-aOPYZ5dOri8X3Wy8v+iglqJYxWK8E2ziApuzK2o09DcuT2Vnd7yb4GHwHGAob1Q
- WfdlFMIBuaEQ7b4KVZBBP98Qgs7j8abpcWTPuiTYA84l+vL7SwMrE3dIoKn3p4gqyBgGcPc-
- hIPcL3RvP5hSjQQPJzqBxwT505OQmrRHBOKW6eUGO5fVjSAvqcx4txL+WWNzrn9yccUaTJKd
- R1+YJDhHhU7K5+PGefI+z7S+Ikgs3kjc4qnQkybtzI0y+J-9+kEI++++0++PMwMUYSZmW+k0
- ++1w+k++1++++3JCKYZEJoZC9YF4HMKGnqvHE-14BnOl5HgBEHk+tV7-1ZLHLbfVE28WFadf
- en2exBFhD4ZKrSlOuorXc1k+Xk7jkbBktcMskzdD2XSWQD5gf1rTxxArzaqXMC-Rb5LEETC5
- XZ1U1kuAMA13f3DBbYxCMG9pPoUDS8HVuWI7tJFjOwM7YBidp3xIn-uC7C5Ag8x6t+MEGl1q
- U1CtryCI0vAyddS2VLkFE08Rv2IyezqgNRotbc3VX7NeQ7MDXiGGUcDqT76+XLoEEnOSOhS4
- loNHjX0h30kxqOZY6RN2Nh0RGwaNaNSQL9Amw4MCfbogi9KL4ylOmsi+iEfS0j0B7o6E4X6x
- peBYT4TK0v4gEvgSVqKDswQxbBNvxYaZAm+In1v1BlF0OqhLqPIvz9jRIRbiyb4vOfyJ29bJ
- prPpXkdx8nUZgSnml0de2JdI1YrzKZZjyngePxMQomv3svg5GzpJKefHsrB-E9Xbg5WkqQOE
- GPUJaCN1BLicRZw6B4kT0q+mzPuIYMuE2uGPSYQktPTCxhUlJ8kGVD5aecUsRZypxpLSfpRN
- KTIzxBAPG00xIKLpZh9hZyrohapuKLWloy0H2l90-S1EMrHtZ2xw98RbwpXq2tKGuhD7HMye
- +N2IX9rpPtE7ZnOZToMdykXTEw4yDKvMbzy9u-aTSDQU3c76w+KTFT6zX4iaSifYHdGg8rYN
- uMh0Ebw+I2g1--E++++6+A7dlW+8jsNkq++++2Y-+++A++++JItOLpF3IpEiHp-IHMrBHgAk
- 26HjZjki--+e6-yUcO8We85VJmo5squOJFDPQak7wTFsT659O9uNLQpqvYPD+sJD8KtI7QKh
- Cd4WVZj+9S2S60h6+rZ0gM4ok4Ss3vVLi1T6Cz+16gJqlTNM-VupLyEh500vHJp5+IQpTOL1
- obMCpRd55ja5vfv9NFipCPONJLJlBXiLsduo9nmf9Yz9EAq-H5G-OQcfulFxWXZHyNZoA5qX
- MuzApKtDUyxttsAvHBRzb0n5znn3Y2lCd7UviyT6nidVIaKeoI4D30ZUONBgMLGzI2g1--E+
- +++6+A3dlW+wkkvzaE+++Aw++++A++++JItOLpF3IpEiF3-G8mX8Hmx8n3I6nMi81oYh9f5a
- tS9Z8WpC9SPZIZ-kmmz89RM-gM1GaELVaLY8E8ESuVTZ4F1iuOQLs-WgfZ+BIaJM0xNMfF8Y
- c8ILt-dQ0y6ZdONbtc3oClMIt4Ea7tNYtiTdVKGKt8EeKBYee+BBJ+-NaJeYPcqimfYcBP2Y
- 3KGmFUXMT-qkMkkpAJE4ZSM-lJ9nIjF+JU6+I2g1--E++++6+A7dlW+MwyXnH+2++-c1+++A
- ++++JItOLpF3IpEiIYJHdNCzHgAk26QjHRJaW2U5RX6mgdIB20kR88z+pcuF8V3jK26WTUkS
- lExUtFYuAYFFdcOVsfVnvHG-PdnpQznR5nil9VU0-X0PTMs+9U2U7RqG+VW1hF4QBCYauFPG
- UROO5V8ErHGVKu+1N2TIegp4hCeeLOqtbbUyjqtJRiHzl7IrmOmUmBYwWnxlI4UnQZjD4mcI
- LRly9Xa8LAWRS1wkCz6WKFJe1RuVgdr66dx+1UfHgSjimbPWNH87V2yEew9aDLSLCbtUul-A
- FQDoiGefegCsf4dHaluPojHmsv9YX4Axgx2xBZJR5V3WAkXHUTKE8E243jRqDpHwsY4tgmp+
- QYcI0fqcPheEPoyWXdaW1hukUE1rckzQ7kpyQnjdw01NYtuG2gHh-K71yfd-z0MVulLNni1l
- Pf3Qr1wheTDDvHg3BB7oNjiSzsI+TU-EGkA23+++U+U+gPIJ6SRvU66e-E++5Es+++k+++-J
- HZd7I3R7HWtEEJCpJypjqXUMzpudzwDnsGFUZuLEHOQHL8RFG2co-UXGeoOjJtZUk7ilAxjd
- 0pLzxvCREA99fHjR3cb4TZtyTjmwdUYX0WvNaAFLV1KCXsuDmezUVnmj8VMfl39-DK3HTUwn
- 9c+kVQIAFRWgiCOg2fOezSNC8ML76uW3MQnsulK7MGts2fgtJfjPVEUla4+BZP+d63K5VJ7l
- zSHYOu6DQXz5p4J66bTCvos0UnAC-WS5vDcVXw2uDhdQmKkGWSLl2Q1cIJseEeI1qf5VMsnH
- pI1kG8wyMWbFrB-O32Zd3VQ0lEhWa0rCZC-OpS1sL0kpfIoEtLCx48ZdGsYIRrL7h7hgp7Ey
- kMW5Ffs4Nl+Nr99RJUk1s1lFWfBO5Q7opGWGHkyHrymGioGeQztUI97ZliX5a8J44ZuymxUX
- R6RnRfv9q93q0tsa+hjvXVPwjXn0P6e3kNdwld4ev2ZaxqZF2brtLibHzmHxtVjGgG-rGC3I
- wEY4uFOaK1hS62IsYz-g-NC7Fhb6qRo-ALq41SER2iik4ozNhqKENInl2XBZhEnZuNQVj59P
- zgRbgwiBHtLQPrZmUiR2Mo+LnlHInu-KPI16sqltT9GqNUzoCtmiPk-X2jgAuh+Q1diTfeii
- KrjvxUPuDfEunK5aPTrQhZhRo461zQudUTpPVu+LSVTSg4-is-TnnDISQ7GYAEUvLUzCjMiU
- hs5Nt8cP89mIPchW7D7HM8H2cALXlv6ppWY0ysHW5ZfWGY5wOVkkcdfOof6lqyY2H0f26ilo
- 27hGv4mCGzRPiY5MgNTx4xfxb7kO12wGemE4MHcZbo4AV1tOMG3hkolAXMDWE1LyQo2NO0lL
- ljOS0RhvSsj0aE1gneRcPdXr8rcvKb0V4jckwvNUVAq9S3ujfRbrF0o8pA0cLspjvMWk3uxc
- 6N4kn0uH6+Ller3Pro9klvKPWZvEoRgB0IyMUbRE9NVl877fRuIpv5cAHGWS4hD0sOKrRSbx
- m+RgWVyAP5JDI3wt7rbRYLTc09yd4PaeQRC9-T9BDaA8l0TIUP0aTuREVp2s15cLilI+SrKE
- YLmzm5uVljF7AVQSB9StOO3y7pFOfVicfO6Bku7BMOTNOrSxEiZeAsknRl7Ud+FVQrax5v0P
- FetYexFsvDFrdsjNL0rAfZ7dKCyR4P34LguyvsGbphJyTtUaQ2p5+17BnQi8AD0pzbJk+qRE
- CWaZWNQGh2fdft8-04hasnocUG8pPUjZ1BxWNuCwHSTZYdr5w-d8jyfE9ZK9glYFGxikbSjZ
- dASRtSEHZXRCBRLrBQETvq+dB12xrrgUmf+8wr9HXKmypn93cg1-DUVDQusUFZjZzAENTEF2
- 8MyEeLzPMOFSI+knTIl-J+RIbrR-yEHFdZ2cLrHMp-aF3SvDmUCH4NJWRRgwqqVoSTGZ56Mu
- FBgGTpxLfLjTyztDPAJJouEWUN507oG9OWlhBYUZYeXMEzxrLxvellOBldQTnrTU0VSIuHRP
- mBh2a4gtVREOu3WJ1kJymww+zHggfUFFy4+1P6dtmyNwkps+wBQ2IHAzK98QM43iMW6hEGOH
- 7J4vIy13eS9rzgleHVPdDqZuU-P530C76IczWq30STGZc7Iar0KXatEnWHsHC2rdrPaNWjiO
- jNiTur8wLy5PzcTRYPFTtnB2n6UktLsp5a9Z0Q33qh58EQJNdUFHyDoDdiFrFgoyc2mWG-B9
- KhLwvp9c50b+xV007vL+vDb3KTHjLv5frhmWLC90IBBjpvnz+J-9+E6I+-E++++6+1lSlW-H
- 15rKQU2++7w1+++A++++++++++2+6+++++++++-JHZdTJ2JHJ0t2IohEGk203++I++++0++P
- MwMUYSZmW+k0++1w+k++1++++++++++-+0++++0Q+E++JItOGJ-LGIsiF2NBI2g-+VE+3+++
- ++U+kab46+ezVb1M++++GE2+++k++++++++++E+U++++oUA++3JCKZxIFJBI9YxEJ3-9+E6I
- +-E++++6+A3dlW+wkkvzaE+++Aw++++A++++++++++2+6++++BE2++-JHZdTJ2JHJ0t2I37E
- Gk203++I++++0+10OQMU4DDcwok-+++O+k++1++++++++++++0++++0L-E++JItOLpF3IpEi
- IYJHI2g-+VE+3+++++U+gPIJ6SRvU66e-E++5Es+++k++++++++++E+U++++1EQ++3JCKYZE
- JoZC9Z--Ip-9-EM+++++-U+4+3k-++-V1+++++++
- ***** END OF BLOCK 1 *****
-